package com.cainli.image;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;

import org.apache.http.Header;
import org.apache.http.client.CookieStore;

/**
 * 协议的下载器, 如http://协议. file://协议
 * 用来将图片下载到文件系统中缓存
 * 
 *
 */
//TODO 针对BaseIm的逻辑, 需要修改ProtocolDownloader的逻辑
public interface ProtocolDownloader
{
    /**
     * 下载图片到缓存文件中
     * @param url 图片url
     * @param out 文件输出地址
     * @param headers headers headers
     * @param cookies cookies cookies 貌似有bug
     * @return 下载后的文件, 如果使用out对象来输出, 则返回null, 否则, 返回保存的file对象
     * @throws IOException 产生io异常
     */
    public File downloadImage(URL url, OutputStream out, Header[] headers, CookieStore cookies) throws IOException;
    
    /**
     * 下载完毕后, 是否保存到缓存中
     * @return
     */
    public boolean useDiskCache();
    
    /**
     * 解码文件成图片
     * @param f 
     * @return gifImage或者Bitmap
     */
    public Object decodeFile(File f);
    
    /**
     * 判断缓存是否已经脏了
     * 仅在useDiskCache为true时有效
     * @param cacheTime 缓存的时间
     * @return 如果为true, 则会重新download
     */
    public boolean isDirty(URL url, long cacheTime);
    
    /**
     * 在开始加载之前调用, 判断是否需要block下载
     * 该方法会在ui线程调用
     * @param drawable
     * @return 是否阻止下载, 如果返回true, 则会阻止下载, 可以调用drawable.invalidate来重新download 
     */
    public boolean onPreDownload(URLDrawable drawable);
}